package com.xz.xzmybatisagent.socket;

/**
 * <p>
 *
 * </p>
 *
 * @author DONG.WANG17@HAND-CHINA.COM
 * @since 2025/3/22-03-22 16:08
 */
public interface SocketCallback {
    /**
     * 连接成功时触发
     */
    default void onStart() {
    }

    /**
     * 连接关闭时触发
     */
    default void onClose() {
    }

    /**
     * 收到消息时触发
     *
     * @param message 接收到的消息
     */
    void onMessage(String message);

    /**
     * 出现错误时触发
     *
     * @param e 具体异常
     */
    void onError(Exception e);

    /**
     * 收到消息时触发，并回应消息
     *
     * @param message 接收到的消息
     * @return 回应消息
     * @implNote 如果返回 null，则不回应消息。
     * 警告：如果 server 端和 client 端都使用此方法，则如果消息处理不当会导致双方消息反复叠加互推
     */
    default String onMessageAndResponse(String message) {
        return null;
    }

    /**
     * 链接状态改变时触发
     *
     * @param status 状态
     */
    default void onStatusChange(ConnectionStatus status) {
    }
}